﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="Task.cs" company="JaguarLabs">
//   JaguarLabs 2013
// </copyright>
// <summary>
//   Used to provide the task data object.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace TasksManagerServices.ValueObjects
{
    using System;
    using System.Collections.Generic;
    using System.Runtime.Serialization;

    /// <summary>
    /// Used to provide the task data object.
    /// </summary>
    [DataContract]
    public class Task
    {
        /// <summary>
        /// Gets or sets the id.
        /// </summary>
        /// <value>
        /// The id.
        /// </value>
        [DataMember]
        public int Id { get; set; }

        /// <summary>
        /// Gets or sets the users.
        /// </summary>
        /// <value>
        /// The users.
        /// </value>
        [DataMember]
        public List<string> Users { get; set; }

        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <value>
        /// The name.
        /// </value>
        [DataMember]
        public string Name { get; set; }

        /// <summary>
        /// Gets or sets the description.
        /// </summary>
        /// <value>
        /// The description.
        /// </value>
        [DataMember]
        public string Description { get; set; }

        /// <summary>
        /// Gets or sets the attachments.
        /// </summary>
        /// <value>
        /// The attachments.
        /// </value>
        [DataMember]
        public List<Attachment> Attachments { get; set; }

        /// <summary>
        /// Gets or sets the end date.
        /// </summary>
        /// <value>
        /// The end date.
        /// </value>
        [DataMember]
        public DateTime EndDate { get; set; }

        /// <summary>
        /// Gets or sets the notification date.
        /// </summary>
        /// <value>
        /// The notification date.
        /// </value>
        [DataMember]
        public DateTime? NotificationDate { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="Task"/> is notified.
        /// </summary>
        /// <value>
        ///   <c>true</c> if notified; otherwise, <c>false</c>.
        /// </value>
        [DataMember]
        public bool Notified { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether [show in calendar].
        /// </summary>
        /// <value>
        ///   <c>true</c> if [show in calendar]; otherwise, <c>false</c>.
        /// </value>
        [DataMember]
        public bool ShowInCalendar { get; set; }

        /// <summary>
        /// Gets or sets the progress.
        /// </summary>
        /// <value>
        /// The progress.
        /// </value>
        [DataMember]
        public int Progress { get; set; }

        /// <summary>
        /// Gets or sets the priority id.
        /// </summary>
        /// <value>
        /// The priority id.
        /// </value>
        [DataMember]
        public int PriorityId { get; set; }

        /// <summary>
        /// Gets or sets the name of the priority.
        /// </summary>
        /// <value>
        /// The name of the priority.
        /// </value>
        [DataMember]
        public string PriorityName { get; set; }

        /// <summary>
        /// Gets or sets the project id.
        /// </summary>
        /// <value>
        /// The project id.
        /// </value>
        [DataMember]
        public int ProjectId { get; set; }

        /// <summary>
        /// Gets or sets the name of the project.
        /// </summary>
        /// <value>
        /// The name of the project.
        /// </value>
        [DataMember]
        public string ProjectName { get; set; }
    }
}